#include <cstdio>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cmath>
using namespace std;
const int N=205;
const int M=100020;
const int INF=0x3f3f3f3f;
struct{
    int to,next;
}e[M];
int head[N];
bool vis[N];
int cnt;
stack<int> s;
int x1[N];
int y1[N];
int x2[N];
int y2[N];
void init(){
    cnt=0;
    memset(head,-1,sizeof(head));
}
void addEdge(int u,int v){
    e[cnt].to=v;
    e[cnt].next=head[u];
    head[u]=cnt++;
}
bool dfs(int u){
    if(vis[u^1]){
        return false;
    }
    if(vis[u]){
        return true;
    }
    vis[u]=true;
    s.push(u);
    for(int i=head[u];i!=-1;i=e[i].next){
        if(!dfs(e[i].to)){
            return false;
        }
    }
    return true;
}
bool TwoSat(int n){
    memset(vis,false,sizeof(vis));
    for(int i=0;i<n;i+=2){
        if(vis[i] || vis[i^1]){
            continue;
        }
        if(!dfs(i)){
            while(!s.empty()){
                vis[s.top()]=false;
                s.pop();
            }
            if(!dfs(i^1)){
                return false;
            }
        }
    }
    return true;
}
double dis(int x1,int y1,int x2,int y2){
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main(void){
    int n;
    while(~scanf("%d",&n)){
        for(int i=0;i<n;i++){
            scanf("%d%d%d%d",&x1[i],&y1[i],&x2[i],&y2[i]);
        }
        //二分枚举半径
        double l=0,r=INF*1.0;
        double mid,ans;
        for(int t=0;t<100;t++){
            mid=(l+r)/2;
            for(int i=0;i<n;i++){
                for(int j=i+1;j<n;j++){
                    //枚举相邻两组点 四个距离
                    double dis1=dis(x1[i],y1[i],x1[j],y1[j]);
                    double dis2=dis(x1[i],y1[i],x2[j],y2[j]);
                    double dis3=dis(x2[i],y2[i],x1[j],y1[j]);
                    double dis4=dis(x2[i],y2[i],x2[j],y2[j]);
                    //要求的是最小半径
                    if(dis1<2*mid){
                        addEdge(i,j);
                    }
                }
            }
        }
    }
    return 0;
}